数据模糊匹配或相似度匹配函数公式实现及思路解析

您所在的位置:网站首页 vba 工作表名称模糊查找怎么设置 数据模糊匹配或相似度匹配函数公式实现及思路解析

数据模糊匹配或相似度匹配函数公式实现及思路解析

2024-07-01 19:34| 来源: 网络整理| 查看: 265

本帖最后由 胡剑0227 于 2013-8-22 22:35 编辑 【基本思路】 既然不规则,那么分析某比对数据(比如“莫泰连锁酒店(孙权路店)”,记为【A1】)的各个字符在目标数据列中出现的次数是很有意义的,比如【A1】的各个字符在目标数据列的【B1】中出现了12个,在【B2】中出现了7个,在所有其他数据中出现的次数更少,那么有理由判定与【A1】匹配的数据是【B1】。以图3为例简要讲解实现步骤。

思路解析1.png (28.22 KB, 下载次数: 1802)

下载附件  保存到相册

2013-8-22 20:50 上传

图3 基本思路的实现方式      步骤1    将C5单元格“莫泰连锁酒店(孙权路店)”的各个字符进行拆分,生成一个12个元素的一维水平数组,如C6:N6单元格区域所示,可由以下公式实现。 =MID($C$5,{1,2,3,4,5,6,7,8,9,10,11,12},1)复制代码   步骤2    B19单元格为“富阳国际贸易中心大酒店”,分析C6:N6的各个字符在B19单元格中出现的次数可由以下公式得到,最后的效果显示在C19:N19单元格区域中。 =--ISNUMBER(FIND($C$6:$N$6,B19,1))复制代码     步骤3    将上述公式中的B19换成B7:B15,那么就能返回C6:N6的各个字符在B7:B15各个单元格中出现的次数,得到图3中的【A】区域,每一行对应B7:B15中的一个单元格。公式如下所示。 =--ISNUMBER(FIND($C$6:$N$6,B7:B15,1))复制代码     步骤4   将【A】区域进行按行汇总就得到【B】区域,【B】区域中最大的数值所对应的数据即是目标匹配数据。对【A】区域C7:N15进行按行汇总的公式如下: =MMULT(C7:N15,{1;1;1;1;1;1;1;1;1;1;1;1})复制代码   步骤5   使用MAX函数可以求得P7:P15中的最大值,该最大值并结合MATCH函数即可返回该最大值在P7:P15中的位置,根据这个位置在B7:B15中返回目标“莫泰连锁酒店(富阳孙权路店)”,具体公式如下。 =INDEX(B7:B15,MATCH(MAX(P7:P15),P7:P15,0)) 于是“莫泰连锁酒店(孙权路店)”  匹配上 “莫泰连锁酒店(富阳孙权路店)”

【改进思路】以上方式的缺陷是没有考虑到各个字符的价值是不同的,比如在为“莫泰连锁酒店(孙权路店)”搜索匹配项时字符【莫】、【泰】、【孙】、【权】的价值要远比字符【酒】、【店】的价值高。这是因为本例中字符【酒】、【店】是极常见的字符,于是某目标包含了这两个字符对于确认是否匹配没有过多的帮助,而【莫】、【泰】等字符在本例是不常见的字符,因此某目标出现了这两个字符对于确认匹配是非常有帮助的。

因此,需要将各个字符的出现频次进行考虑,频次高的降低其匹配价值(图3【A】区域的每个数字代表了匹配价值),这就是【改进思路】。

思路解析2.png (30.39 KB, 下载次数: 1694)

下载附件  保存到相册

2013-8-22 21:13 上传

图4 改进思路的实现方式

步骤1  将图3【A】区域进行按“列”汇总就可以得到各个字符共出现在几个目标数据中,如图4【CC】区域所示,具体公式如下。

=MMULT({1,1,1,1,1,1,1,1,1},C7:N15)复制代码

步骤2  将图3【A】区域除以图4【CC】区域得到图4的【AA】区域,此时可以看到对于第32行,【莫】、【泰】的权值为1,而【酒】、【店】的权值仅仅为0.13,这样最后得到的【BB】区域中最大值为7.375,次大值为2.375。这远比图3中的最大值12,次大值为7的区分度要好得多。    

      余下实现与【基本方式】如出一辙,有兴趣可以下载附件,创意在于为每个字符构造的权值。当然这种思路还是可以再次提升的,于是有了下面的【进一步提升】。


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3